package org.example.mapper;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.example.pojo.domain.Reservation;

import java.util.Date;
import java.util.List;

public interface ReservationMapper {
    // 查询某用户的所有预约
    List<Reservation> findByUserId(Integer userId);
    /** 分页前调用 startPage 后，查询此用户所有预约（按时间倒序） */
    List<Reservation> listByUser(int userId);
    // 根据预约 ID 查询预约
    Reservation findById(Integer reservationId);
    // 插入新预约
    void insertReservation(Reservation reservation);
    // 更新预约状态
    void updateReservationStatus(@Param("reservationId") Integer reservationId,
                                 @Param("status")String status);
    // 删除预约
    void deleteReservation(Integer reservationId);

/*    *//**
     * 统计指定用户在指定日期的预约次数
     * @param userId 用户ID
     * @param date   日期（只取年月日部分）
     * @return 当天预约次数
     *//*
    int countByUserIdAndDate(@Param("userId") Integer userId,
                             @Param("date") Date date);*/

    /**
     * 统计指定用户在指定日期的有效预约次数（不包括已取消）
     */
    int countByUserIdAndDateAndNotCancelled(@Param("userId") Integer userId,
                                            @Param("date") Date date);

    // 获取当天的预约人数
    @Select("SELECT COUNT(*) FROM reservation WHERE status = 'confirmed' AND DATE(reserved_time) = CURDATE()")
    int countConfirmedVisitorsByDate(Date date);

    // 根据状态查询用户预约记录
    List<Reservation> listByStatus(@Param("userId") int userId, @Param("status") String status);
}
